<?php
namespace backend\controllers;

use Yii;
use common\models\GameNotice;
use common\models\GameState;
use common\models\Game;
use yii\data\Pagination;
use yii\helpers\BaseJson;

/**
 * 游戏公告管理
 *
 * @author jois
 */
class GameNoticeController extends BaseController
{

    /**
     * 游戏公告列表
     */
    public function actionIndex()
    {
        // 所有游戏状态，搜索游戏时模态框所用
        $states = GameState::find()->all();

        $input = Yii::$app->request->get();
        // 根据参数获取信息
        if (! empty($input['key'])) {
            $query = GameNotice::find()->where("title like '%" . $input['key'] . "%' or game_name like '%" . $input['key'] . "%'");
        } else {
            $query = GameNotice::find();
        }

        // 根据类型参数过滤游戏
        if (! empty($input['gametype'])) {
            $query->andWhere("gametype=:gametype")->addParams([
                'gametype' => $input['gametype']
            ]);
        }
        // 根据设备参数过滤游戏
        if (! empty($input['showchannel'])) {
            $query->andWhere("showchannel=:showchannel")->addParams([
                'showchannel' => $input['showchannel']
            ]);
        }

        // 根据排序抓取分页列表数据
        if (! empty($input['orderno'])) {
            $query->orderBy("orderno {$input['orderno']}");
        } elseif (! empty($input['id'])) {
            $query->orderBy("id {$input['id']}");
        } else {
            $query->orderBy("orderno desc");
        }
        $countQuery = clone $query;

        // 分页处理
        $pages = new Pagination([
            'totalCount' => $countQuery->count()
        ]);
        $models = $query->offset($pages->offset)
            ->limit($pages->limit)
            ->all();
        return $this->render('index', compact('models', 'pages', 'states'));
    }

    /**
     * 添加或编辑游戏公告
     */
    public function actionEdit()
    {
        $model = null;
        $id = Yii::$app->request->get('id', 0);
        if ((int) $id > 0) {
            $model = GameNotice::findOne((int) $id);
        }
        return $this->render('edit', compact('model'));
    }

    /**
     * 保存新增或修改的游戏公告
     */
    public function actionSave()
    {
        $post = Yii::$app->request->post();
        // 验证
        if (Yii::$app->request->isPost && ! empty($post)) {
            // 设置表单回带
            Yii::$app->session->setFlash('post', $post);

            // 结束时间非空，则要大雨开测时间
            if (! empty($post['endtime']) && ! empty($post['starttime'])) {
                if (strtotime($post['endtime']) <= strtotime($post['starttime'])) {
                    Yii::$app->session->setFlash('message_error', '开始时间必须要早于结束时间');
                    return $this->redirect(Yii::$app->request->referrer);
                }
            }

            // 将时间转化为时间戳
            $post['starttime'] = strtotime($post['starttime']);
            $post['endtime'] = strtotime($post['endtime']);

            // 保存数据
            $game_notice = isset($post['id']) ? GameNotice::findOne((int) $post['id']) : new GameNotice();
            $game_notice->attributes = $post;
            $game_notice->save();

            // 验证数据
            if (! empty($game_notice->getErrors())) {
                Yii::$app->session->setFlash('message_error', $game_notice->getErrors());
                return $this->redirect(Yii::$app->request->referrer);
            }
            Yii::$app->session->setFlash('message_success', isset($post['id']) ? '编辑成功！' : '添加成功！');
            $session = Yii::$app->session;
            unset($session['post']);
            return $this->redirect('/game-notice/index', 200);
        }
        throw new \yii\web\MethodNotAllowedHttpException('操作异常，不支持非post提交保存数据');
        return false;
    }

    /**
     * 游戏公告删除
     */
    public function actionDelete()
    {
        if (! Yii::$app->request->isPost) {
            throw new \yii\web\MethodNotAllowedHttpException('操作异常，不支持非post提交删除数据');
            return false;
        }
        // 验证游戏公告是否存在
        $query = GameNotice::findOne((int) Yii::$app->request->post('notice_id'));
        if (is_object($query)) {
            // 执行删除，并返回成功信息
            $query->delete();
            Yii::$app->session->setFlash('message_success', '删除成功！');
            return $this->redirect('/game-notice/index', 200);
        }
        // 不存在返回上一页，并返回错误信息
        Yii::$app->session->setFlash('message_error', '此游戏公告不存在！');
        return $this->redirect(Yii::$app->request->referrer);
    }

    /**
     * 指派所属游戏
     */
    public function actionAssignGame()
    {
        // 取得数据
        $game_id = Yii::$app->request->post('game_id', 0);
        $game_notice_id = Yii::$app->request->post('game_notice_id', 0);
        $game = Game::findOne($game_id);
        $game_notice = GameNotice::findOne($game_notice_id);

        // 验证
        if (is_object($game) && is_object($game_notice)) {
            // 保存指派
            $game_notice->game_id = $game_id;
            $game_notice->game_name = $game->game_name;
            $game_notice->save();

            return BaseJson::encode($game);
        }
        return BaseJson::encode('操作一场，参数获取无效');
    }
}
